package org.example.d5_collecion_exception;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/***
 * 目标：理解集合的并发修改异常问题，并解决
 */
public class CollectionTest {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("王麻子");
        list.add("小李子");
        list.add("李爱花");
        list.add("张全当");
        list.add("肖李");
        list.add("李玉刚");
        System.out.println(list);

        //需求：找出集合中全部带李的名字，并从集合中删除//
        //迭代过程中修改集合：当你正在迭代一个集合（例如 ArrayList、LinkedList、HashMap 等），
        // 并且在迭代过程中直接或间接地修改了这个集合（例如添加、删除元素），就会抛出 ConcurrentModificationException。
        //使用迭代器遍历
//        Iterator<String> it = list.iterator();
//        while(it.hasNext()){
//            String name = it.next();
//            if (name.contains("李")){
//                list.remove(name);
//            }
//        }
//        System.out.println(list);
//        for (int i = 0; i < list.size(); i++) {
//            String name = list.get(i);
//            if (name.contains("李")){
//                list.remove(name);
//                i--;  //不加入的话就会删除不完整  [王麻子, 李爱花, 张全当, 李玉刚]
//            }//倒着删除也可以
//        }
//        System.out.println(list);
//
        Iterator<String> it = list.iterator();
        while(it.hasNext()){
            String name = it.next();
            if (name.contains("李")){
              //  list.remove(name);  // 不要用集合对象自己去删除 否则出现并发修改异常的错误
                it.remove();//删除迭代器当前遍历到的数据，每删除一个数据后，相当于在底层做了i--；
            }
        }
        System.out.println(list);
//     使用增强for循环遍历集合并删除数据，没有办法解决bug
//        for (String name : list) {
//            if (name.contains("李")){
//                list.remove(name);
//            }
//        }
//        System.out.println(list);
    }
}
